package structureDeDonnee;


/**
 * Un couple d'entier pouvant représenter la position des cellules ou 
 * les coordonnés d'un vecteur
 * 
 * @see Cell
 */

public class Position implements Comparable<Position> {
	
	/**
	 * X position
	 */
	private int x;
	
	/**
	 * Y position
	 */
	private int y;
	
	public Position(){}
	
	/**
	 * Constructor used to create a Position
	 * 
	 * @param X position 
	 * @param Y position
	 */
	public Position(int x, int y){	
		this.x = x;
		this.y = y;
	}
	
	/**
	 * constructeur 
	 * @param p Position dont on va recuperer les variables x et y
	 */
	public Position(Position p){
		this.x = p.x;
		this.y = p.y;
	}

	/**
	 * verifie qu'un objet est égale à cette position 
	 * 
	 * @param obj objet avec le quel on compare this
	 * 
	 * @return vrai si this et obj sont égales, faux sinon.
	 */
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Position other = (Position) obj;
		if (x != other.x)
			return false;
		if (y != other.y)
			return false;
		return true;
	}
	
	public int getX() {
		return this.x;
	}

	public int getY() {
		return y;
	}
	
	public void setX(int x) {
		this.x = x;
	}
	
	public void setY(int y) {
		this.y = y;
	}
	
	@Override
	public String toString(){
		return "("+this.x+","+this.y+")";
	}
	
	/**
	 * @return une copie de this
	 */
	@Override
	public Position clone(){
		return new Position(x,y);
	}
	
	/**
	 * @param position: position à comparer 
	 * @return -1 si this.y< position.y ou (this.y = position.y et this.x < position.x)  
	 *          0 si this.y = position.y et this.x = position.x 
	 *          1 sinon
	 */
	@Override
	public int compareTo(Position position) {
		//on pose A= this et B = position
		
		// A.y < B.y => A < B : tri de haut en bas
		if (this.getY() < position.getY()) {
			return -1;
		} else if (this.getY() == position.getY()) {

			//si A.y = B.y 
			// A.x < B.x => A < B : tri de gauche à droite
			if (this.getX() > position.getX()) {
				return -1;
			} else if (this.getX() == position.getX()) {
				return 0;
			} else {
				return 1;
			}
		} else {
			//sinon alors A.y > B.y t
			return 1;

		}
	}
	

}
